// 知识点1：throw抛出的表达式类型必须具有完全类型（如若是一个类，必须有完整的定义，不能仅仅只有声明）

// 知识点2：throw的抛出表达式若是一个指向局部对象的指针，那么肯定是错误的，因为其指向的内存会被释放，就类似于函数不能返回局部对象的指针一样（该块catch语句之前已经退出，对象已经被销毁）

// 知识点3：throw抛出的表达式是其静态编译的类型，也就是静态类型，所以不会发生动态绑定，若throw表达式解引用一个基类（基类的类型）指针，该指针指向的是派生类对象，则抛出的对象会被切除其派生类的部分

// 答案：只有指针P所分配的内存会出现错误，所以我们需要解决的问题是怎样在发生异常时，自动释放其指向的内存

// 1：使用智能指针，并传入删除的lambda表达式

// shared_ptr<int> p(new int[v.size()], [](int *p) { delete[] p;
// });//lambda表达式相当于一个删除器
// 2：使用类：创建一个包含一个int*的类，在析构函数进行delete文件指针

// class intAr
// {
//     int *p=nullptr;
// public:
//     intAr(size_t n):p(new int[n]){}
//     ~intAr()
//     {
//         delete[]p;
//     }
// }